#############################################################################
# Variable definitions
#EXE=.exe
OCAMLC=ocamlc
OCAMLOPT=ocamlopt
OCAMLDEP=ocamldep
INCLUDES=-I +lablgtk2
OCAMLC_FLAGS=-w A -thread $(INCLUDES)
OCAMLOPT_FLAGS=-w A -thread $(INCLUDES)

PROGRAMS=subprocessTest$(EXE) mathTest$(EXE)

#############################################################################
# Primary targets
.PHONY: all
all: $(PROGRAMS)

.PHONY: clean
clean:
	rm -f *.cmo *.cma $(PROGRAMS) *.o *~ *.cmi *.cmx \
              *.stackdump *.html *.css .depend

#############################################################################
# Building targets

subprocessTest$(EXE) : miniUnit.cmo subprocess.cmo subprocessTest.cmo
	$(OCAMLC) -o $@ $(OCAMLC_FLAGS) unix.cma threads.cma str.cma $^

mathTest$(EXE) : miniUnit.cmo math.cmo mathTest.cmo
	$(OCAMLC) -o $@ $(OCAMLC_FLAGS) $^

#############################################################################
# Implicit targets

# Convenience target that prints out the inferred interface for the
# specified source file.
%.show_interface : %.ml
	$(OCAMLC) -i $(OCAMLC_FLAGS) $<

%.cmi : %.mli
	$(OCAMLC) -c $(OCAMLC_FLAGS) $< -o $@
%.cmo : %.ml
	$(OCAMLC) -c $(OCAMLC_FLAGS) $< -o $@
%.cmx : %.ml
	$(OCAMLOPT) -c $(OCAMLOPT_FLAGS) $< -o $@

.depend:
	$(OCAMLDEP) *.mli *.ml > .depend

-include .depend
